
package model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;


/**
 * 
 * @author Igor de Azevedo Kimieciki
 * @author João Pedro Flach
 */
public class Album implements Serializable {
    
    private String titulo;
    private int ano;
    private String genero;
    private ArrayList<Musica> musicas;
    private Artista autor;
    private int altera;
    private boolean publicado;

    
    /**
     * Método contrutor oficial de um álbum, usar para vincular álbum definitivamente ao artista. 
     * 
     * @param titulo titulo do álbum
     * @param ano ano de lançamento do álbum
     * @param genero gênero musical do álbum
     * @param autor artista que compôs o álbum 
     */
    public Album(String titulo, int ano, String genero, Artista autor) {
        this.titulo = titulo;
        this.ano = ano;
        this.genero = genero;
        this.autor = autor;
                
        autor.addAlbum(this);        
        this.musicas = new ArrayList<Musica>();
    }
    
    /**
     * Método contrutor temporário de um álbum, usar apenas para testar se dois álbuns são iguais (equals). 
     * 
     * @param titulo titulo do álbum
     * @param autor artista que compôs o álbum 
     */
    public Album(String titulo, Artista autor) {
        this.titulo = titulo;
        this.autor = autor;                 
    }   
    /**     
     * 
     * @return autor do álbum
     */

    public Artista getAutor() {
        return autor;
    }
    
    /** 
     * 
     * @param musica musica que será adicionada ao álbum; 
     */
    
    public void addMusica(Musica musica){
        this.musicas.add(musica);
    }

    /**
     * 
     * @return titulo do álbum
     */
    public String getTitulo() {
        return titulo;
    }

    /**
     * 
     * @param titulo novo titulo do álbum
     */
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    
    /**
     * 
     * @return ano de lançamento do álbum
     */
    public int getAno() {
        return ano;
    }

    /**
     * 
     * @param ano novo ano de lançamento do álbum
     */
    public void setAno(int ano) {
        this.ano = ano;
    }

    /**
     * 
     * @return gênero musical do album
     */
    public String getGenero() {
        return genero;
    }
    
    /**
     * 
     * @param genero novo gênero musical do álbum
     */

    public void setGenero(String genero) {
        this.genero = genero;
    }
    
    /**
     * 
     * @return conjunto de músicas que o álbum contém
     */
    public ArrayList<Musica> getMusicas() {
        return musicas;
    }
    
    @Override
    public String toString() {
        //return "Titulo: " + titulo + "\nGenero: " + genero + "\nAno: " + ano;
        
        String retorno = "- Titulo: " + titulo + "\n- Genero: " + genero + "\n- Ano: " + ano + "\n- Musicas: \n";
       
        Iterator<Musica> it = musicas.iterator();
        while(it.hasNext())
        {
           Musica obj = it.next();
           retorno += "-- " + obj.toString();
        }
        
        
        return retorno;
    }    
    
    @Override
    public boolean equals(Object obj){
        
        Album outra = (Album) obj;
        return (this.titulo.equals(outra.titulo) && this.autor.equals(outra.autor));
    }       
}